package com.biao.java8.optional_test;

import java.util.Optional;

public class Optional_Test {
    public static void main(String[] args) {
        String s = null;
        /**
         * ofNullable 允许接收空值对象
         * of 不允许传递空值
         * isPresent 如果传递为空对象,返回false, 不为空,返回true
         * ifPresent 如果传递不为空,就会执行里面代码
         */
        Optional<String> ofNullable = Optional.ofNullable(s);
//        System.out.println(ofNullable.get());   // 为空,所以调用 get() 报错

//        Optional<String> of = Optional.of(s);       // of 不允许接收空值,所以这行报错

        System.out.println("isPresent: " + ofNullable.isPresent());     // 为空,所以返回false

        ofNullable.ifPresent(a -> System.out.println("ifPresent: " + a));      // 为空,所以不执行 ifPresent 里面的代码

        /*
        设置默认值, 通过使用 orElse()  如果传入为空值,赋值给默认值
         */
        String orElse = Optional.ofNullable(s).orElse("orElse");
        System.out.println("orElse: " + orElse);
        /*
        使用 orElseGet() 设置默认值,
        和 orElse() 不同的是, orElseGet() 可以编写逻辑代码,不会直接就赋值,可以执行自己想要的其他操作
         */
        String orElseGet = Optional.ofNullable(s).orElseGet(() -> {
            System.out.println("---------------------------");
            return "orElseGet";
        });
        System.out.println("orElseGet: " + orElseGet);
        // 同理, orElseThrow() 意思应该是,如果为空就抛指定异常

        /*
         filter
         */
        boolean filter = Optional.ofNullable(s).filter(a -> a.equals("aaa")).isPresent();
        System.out.println("filter: " + filter);

    }
}
